package edu.hunau.cxb19.oop.class16.hk;

import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;

import org.junit.Test;

/**
 *
 * @author hb
 *
 *         2020-03-17 14:50:47
 */
public class HomeworkTest {
	@Test
	public void checkAroundTest() {
		System.out.println(checkAround("abac"));
		System.out.println(checkAround("aba"));
		System.out.println(checkAround("abcd"));
	}

	/**
	 * 1. 判定一个字符串是否为回文，如果是回文 返回true
	 * 
	 * 2. 如果该字符串添加一个字符为回文，也返回true (如果字符串删除一个字符能够形成回文，返回true)
	 * 
	 */

	public boolean checkAround(String datas) {
		// 1. 判定一个字符串是否为回文，如果是回文 返回true
		checkString(datas);
		// 2. 如果该字符串添加一个字符为回文，也返回true (如果字符串删除一个字符能够形成回文，返回true)
		for (int i = 0; i < datas.length(); i++) {
			StringBuilder sb = new StringBuilder(datas);
			StringBuilder newDatas = sb.deleteCharAt(i);
			// 判定newDatas是否为回文
			if (checkString(newDatas.toString())) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 判定一个字符串是否为回文
	 * 
	 * @param datas
	 * @return
	 */
	public boolean checkString(String datas) {
		StringBuilder sb = new StringBuilder(datas);
		return sb.reverse().toString().equals(datas);
	}

	@Test
	public void testSubString() {
		String[] datas = subString("012345");
		System.out.println(Arrays.toString(datas));
	}

	/**
	 * 获得一个字符串的所有子串
	 * 
	 * @param datas
	 * @return
	 */
	public String[] subString(String datas) {
		String[] result = new String[0];
		int length = datas.length();
		// 外表示管理子串的长度
		for (int i = 0; i < length; i++) {
			for (int begin = 0, end = length - i; end <= length; begin++, end++) {
				result = Arrays.copyOf(result, result.length + 1);
				result[result.length - 1] = datas.substring(begin, end);
			}

		}
		return result;

	}
	
	@Test
	public void testIdCard() {
		System.out.println(parseIdCard("43012120000318123d"));
	}

	/**
	 * 输入身份证号码获得年龄
	 * xxxxxx19001212xxxx
	 */
	public int parseIdCard(String idCard) {
		//1. 判定字符串是否符合身份证的格式要求
		String idCardRegex="^\\d{17}[0-9Xx]$";
		if(!idCard.matches(idCardRegex)) {
			 throw new IdCardFormatException("身份证格式错误!");
		}
		//2. 获得用户的出生的信息
		String datas=idCard.substring(6, 14);
		//3. 解析成一个LocalDate类型
		LocalDate newDate= LocalDate.parse(datas, DateTimeFormatter.ofPattern("yyyyMMdd"));
		//4. 获得当前的时间
		LocalDate now = LocalDate.now();
		Period period = Period.between(newDate, now);
		 
		return period.getYears();
	}

}
